package com.qf.java2201.service.impl;

import com.qf.java2201.dao.OrderDao;
import com.qf.java2201.dao.UserinfoDao;
import com.qf.java2201.dao.impl.OrderDaoImpl;
import com.qf.java2201.dao.impl.UserinfoDaoImpl;
import com.qf.java2201.pojo.HOrder;
import com.qf.java2201.service.OrderService;

import java.util.Date;
import java.util.List;

public class OrderServiceImpl implements OrderService {
    OrderDao orderDao = new OrderDaoImpl();
    UserinfoDao userinfoDao = new UserinfoDaoImpl();
    @Override
    public boolean checkDate(String odate, String sjdid, String edid) {

        //查询刚该医生的 最大预约人数    查寻 h_type表

        int dnum = userinfoDao.getDnum(edid);
        //查询该时间段 已预约人数 查询 h_order表


        // yyztid = 21 是 预约中
        // yyztid = 22 是 已付款
        // yyztid = 23 是 已取消
        // yyztid = 24 是 已完成
        // yyztid = 25 是 已作废
        int yyztid = 22;
       int PayOrder = orderDao.getPayOrderCount(odate, sjdid, edid, yyztid);

        //如果最大预约人数 大于 已预约人数  说明 还可以预约 返回true 否则 返回 false
        if (dnum - PayOrder > 0) {
            return  true;
        } else {
            return false;
        }

    }

    @Override
    public int updateOrserStatus(String oid, Integer yyztid) {

        return orderDao.updateOrderStatus(oid, yyztid);
    }

    @Override
    public List<HOrder> findOrderByUdid(Integer did) {

        //查询用户的预约单

        return orderDao.findOrderByUdid(did);
    }

    @Override
    public int updateOrserByType(String oid, String zt, String type, Integer did, Date odate) {
        //预约中的取消
        if (type.equals("1")){
            return this.updateOrserStatus(oid, Integer.parseInt(zt));
        }
        //预约中付款
        if (type.equals("2")) {
            return this.updateOrserStatus(oid,Integer.parseInt(zt));
        }

        //已付款 的完成
        if (type.equals("4")) {
            return  this.updateOrserStatus(oid, Integer.parseInt(zt));
        }

        //已付款的 取消
        //判断 是否能 取消  一天（按照预约单日期统计的） 只能取消一次  一周只能取消两次
        //不是 按照取消日期统计的
        if (type.equals("3")) {
            //判断能否取消

            boolean isQX = isQxOrder(oid,did,odate);
        }


        return 0;
    }
    //判断 预约单是否能够取消
    private boolean isQxOrder(String oid, Integer did, Date odate) {
        //预约单当天 取消的 个数
        int dayQxcount = orderDao.countDayQxCount(oid,did,odate);

        //该预约单 所在那一周的 取消次数
        int weekQxcount = orderDao.countWeekQxCount(oid,did,odate);

        if (dayQxcount >=1 || weekQxcount >= 2) {
            return  false;
        }
        return true;
    }
}
